{{#discourse-topic multiSelect=multiSelect enteredAt=enteredAt topic=model hasScrolled=hasScrolled}}
  {{#if model}}
    {{add-category-class category=model.category}}
    <div class="container">
      {{discourse-banner user=currentUser banner=site.banner overlay=hasScrolled hide=model.errorLoading}}
    </div>
  {{/if}}

  {{plugin-outlet name="topic-above-post-stream" args=(hash model=model)}}

  {{#if model.postStream.loaded}}
    {{#if model.postStream.firstPostPresent}}
      <div id="topic-title">
        <div class="container">

          <div class="title-wrapper">
            {{#if editingTopic}}
              {{#if model.isPrivateMessage}}
                <span class="private-message-glyph">{{fa-icon "envelope"}}</span>
              {{/if}}

              {{text-field id="edit-title" value=buffered.title maxlength=siteSettings.max_topic_title_length autofocus="true"}}
              {{#if showCategoryChooser}}
                <br>
                {{category-chooser valueAttribute="id" value=buffered.category_id}}
              {{/if}}

              {{#if canEditTags}}
                <br>
                {{tag-chooser tags=buffered.tags categoryId=buffered.category_id}}
              {{/if}}

              {{plugin-outlet name="edit-topic" args=(hash model=model buffered=buffered)}}

              <br>
              {{d-button action="finishedEditingTopic" class="btn-primary btn-small submit-edit" icon="check"}}
              {{d-button action="cancelEditingTopic" class="btn-small cancel-edit" icon="times"}}
            {{else}}
              <h1>
                {{#unless model.is_warning}}
                  <a href={{pmPath}}>
                    <span class="private-message-glyph">{{fa-icon "envelope"}}</span>
                  </a>
                {{/unless}}

                {{#if model.details.loaded}}
                  {{topic-status topic=model}}
                  <a href="{{unbound model.url}}" {{action "jumpTop"}} class="fancy-title">
                    {{{model.fancyTitle}}}
                  </a>
                {{/if}}

                {{#if model.details.can_edit}}
                  <a href {{action "editTopic"}} class="edit-topic" title="{{i18n "edit"}}">{{fa-icon "pencil"}}</a>
                {{/if}}
              </h1>

              {{#unless model.isPrivateMessage}}
                {{topic-category topic=model class="topic-category"}}
              {{/unless}}
            {{/if}}
          </div>
          {{plugin-outlet name="topic-title" args=(hash model=model)}}
        </div>
      </div>
    {{/if}}

    <div class="container posts">
      <div class='selected-posts {{unless multiSelect 'hidden'}}'>
        {{partial "selected-posts"}}
      </div>

      {{#topic-navigation topic=model jumpToIndex=(action "jumpToIndex") as |info|}}
        {{#if info.renderAdminMenuButton}}
          {{topic-admin-menu-button
            topic=model
            fixed="true"
            toggleMultiSelect=(action "toggleMultiSelect")
            deleteTopic=(action "deleteTopic")
            recoverTopic=(action "recoverTopic")
            toggleClosed=(action "toggleClosed")
            toggleArchived=(action "toggleArchived")
            toggleVisibility=(action "toggleVisibility")
            showAutoClose=(action "topicRouteAction" "showAutoClose")
            showFeatureTopic=(action "topicRouteAction" "showFeatureTopic")
            showChangeTimestamp=(action "topicRouteAction" "showChangeTimestamp")
            convertToPublicTopic=(action "convertToPublicTopic")
            convertToPrivateMessage=(action "convertToPrivateMessage")}}
        {{/if}}

        {{#if info.renderTimeline}}
          {{topic-timeline
            topic=model
            prevEvent=info.prevEvent
            fullscreen=info.topicProgressExpanded
            enteredIndex=enteredIndex
            loading=model.postStream.loading
            jumpToPost=(action "jumpToPost")
            jumpTop=(action "jumpTop")
            jumpBottom=(action "jumpBottom")
            jumpToPostPrompt=(action "jumpToPostPrompt")
            jumpToIndex=(action "jumpToIndex")
            replyToPost=(action "replyToPost")
            toggleMultiSelect=(action "toggleMultiSelect")
            deleteTopic=(action "deleteTopic")
            recoverTopic=(action "recoverTopic")
            toggleClosed=(action "toggleClosed")
            toggleArchived=(action "toggleArchived")
            toggleVisibility=(action "toggleVisibility")
            showAutoClose=(action "topicRouteAction" "showAutoClose")
            showFeatureTopic=(action "topicRouteAction" "showFeatureTopic")
            showChangeTimestamp=(action "topicRouteAction" "showChangeTimestamp")
            convertToPublicTopic=(action "convertToPublicTopic")
            convertToPrivateMessage=(action "convertToPrivateMessage")}}
        {{else}}
          {{topic-progress
            prevEvent=info.prevEvent
            topic=model
            expanded=info.topicProgressExpanded
            jumpToPost=(action "jumpToPost")}}
        {{/if}}
      {{/topic-navigation}}

      <div class="row">
        <section class="topic-area" id="topic" data-topic-id="{{unbound model.id}}">

          <div class="posts-wrapper">
            {{conditional-loading-spinner condition=model.postStream.loadingAbove}}

            {{plugin-outlet name="topic-above-posts" args=(hash model=model)}}

            {{#unless model.postStream.loadingFilter}}
              {{scrolling-post-stream
                posts=postsToRender
                canCreatePost=model.details.can_create_post
                multiSelect=multiSelect
                selectedPostsCount=selectedPostsCount
                selectedQuery=selectedQuery
                gaps=model.postStream.gaps
                showFlags=(action "showPostFlags")
                editPost=(action "editPost")
                showHistory=(action "topicRouteAction" "showHistory")
                showLogin=(action "topicRouteAction" "showLogin")
                showRawEmail=(action "topicRouteAction" "showRawEmail")
                deletePost=(action "deletePost")
                recoverPost=(action "recoverPost")
                expandHidden=(action "expandHidden")
                newTopicAction=(action "replyAsNewTopic")
                toggleBookmark=(action "toggleBookmark")
                togglePostType=(action "togglePostType")
                rebakePost=(action "rebakePost")
                changePostOwner=(action "changePostOwner")
                unhidePost=(action "unhidePost")
                replyToPost=(action "replyToPost")
                toggleWiki=(action "toggleWiki")
                toggleSummary=(action "toggleSummary")
                removeAllowedUser=(action "removeAllowedUser")
                removeAllowedGroup=(action "removeAllowedGroup")
                showInvite=(action "topicRouteAction" "showInvite")
                topVisibleChanged=(action "topVisibleChanged")
                currentPostChanged=(action "currentPostChanged")
                currentPostScrolled=(action "currentPostScrolled")
                bottomVisibleChanged=(action "bottomVisibleChanged")
                selectPost=(action "toggledSelectedPost")
                selectReplies=(action "toggledSelectedPostReplies")
                fillGapBefore=(action "fillGapBefore")
                fillGapAfter=(action "fillGapAfter")}}
            {{/unless}}

            {{conditional-loading-spinner condition=model.postStream.loadingBelow}}
          </div>
          <div id="topic-bottom"></div>

          {{#conditional-loading-spinner condition=model.postStream.loadingFilter}}
            {{#if loadedAllPosts}}

              {{topic-closing topic=model}}
              {{#if session.showSignupCta}}
                {{! replace "Log In to Reply" with the infobox }}
                {{signup-cta}}
              {{else}}
                {{#if currentUser}}
                  {{topic-footer-buttons
                    topic=model
                    toggleMultiSelect=(action "toggleMultiSelect")
                    deleteTopic=(action "deleteTopic")
                    recoverTopic=(action "recoverTopic")
                    toggleClosed=(action "toggleClosed")
                    toggleArchived=(action "toggleArchived")
                    toggleVisibility=(action "toggleVisibility")
                    showAutoClose=(action "topicRouteAction" "showAutoClose")
                    showFeatureTopic=(action "topicRouteAction" "showFeatureTopic")
                    showChangeTimestamp=(action "topicRouteAction" "showChangeTimestamp")
                    convertToPublicTopic=(action "convertToPublicTopic")
                    convertToPrivateMessage=(action "convertToPrivateMessage")
                    toggleBookmark=(action "toggleBookmark")
                    showFlagTopic=(action "topicRouteAction" "showFlagTopic")
                    showInvite=(action "topicRouteAction" "showInvite")
                    toggleArchiveMessage=(action "toggleArchiveMessage")
                    replyToPost=(action "replyToPost")
                    }}
                {{else}}
                  {{d-button icon="reply" class="btn-primary" action="showLogin" label="topic.reply.title"}}
                {{/if}}
              {{/if}}

              {{#if model.pending_posts_count}}
                <div class="has-pending-posts">
                  {{{i18n "queue.has_pending_posts" count=model.pending_posts_count}}}

                  {{#if currentUser.show_queued_posts}}
                    {{#link-to "queued-posts"}}
                      {{fa-icon "check"}}
                      {{i18n "queue.view_pending"}}
                    {{/link-to}}
                  {{/if}}
                </div>
              {{/if}}

              {{#if showSelectedPostsAtBottom}}
                <div class='selected-posts {{unless multiSelect 'hidden'}}'>
                  {{partial "selected-posts"}}
                </div>
              {{/if}}

              {{plugin-outlet name="topic-above-suggested" args=(hash model=model)}}

              {{#if model.details.suggested_topics.length}}
                <div id="suggested-topics">
                  <h3>{{{suggestedTitle}}}</h3>
                  <div class="topics">
                    {{#if model.isPrivateMessage}}
                      {{basic-topic-list hideCategory="true"
                                         showPosters="true"
                                         topics=model.details.suggested_topics}}
                    {{else}}
                      {{basic-topic-list topics=model.details.suggested_topics}}
                    {{/if}}
                  </div>
                  <h3>{{{browseMoreMessage}}}</h3>
                </div>
              {{/if}}

            {{/if}}
          {{/conditional-loading-spinner}}

        </section>
      </div>

    </div>
  {{else}}
    <div class="container">
      {{#conditional-loading-spinner condition=noErrorYet}}
        {{#if model.notFoundHtml}}
          <div class="not-found">{{{model.notFoundHtml}}}</div>
        {{else}}
          <div class="topic-error">
            <div>{{model.message}}</div>
            {{#if model.noRetry}}
              {{#unless currentUser}}
                {{d-button action="showLogin" class="btn-primary topic-retry" icon="user" label="log_in"}}
              {{/unless}}
            {{else}}
              {{d-button action="retryLoading" class="btn-primary topic-retry" icon="refresh" label="errors.buttons.again"}}
            {{/if}}
          </div>
          {{conditional-loading-spinner condition=retrying}}
        {{/if}}
      {{/conditional-loading-spinner}}
    </div>
  {{/if}}

  {{share-popup topic=model replyAsNewTopic="replyAsNewTopic"}}

  {{#if currentUser.enable_quoting}}
    {{quote-button quoteState=quoteState selectText=(action "selectText")}}
  {{/if}}
{{/discourse-topic}}
